package cn.ty.jpa.enums;

import java.util.Collection;
import java.util.function.Consumer;

import cn.ty.jpa.wrapper.OperatorWrapper;

public enum Operator {
    EQ((e) -> {
        e.getSpecWrapper().eq(e.getName(), e.getValue());
    }),
    NE((e) -> {
        e.getSpecWrapper().ne(e.getName(), e.getValue());
    }),
    LIKE((e) -> {
        e.getSpecWrapper().like(e.getName(), (String)e.getValue());
    }),
    STARTING_WITH((e) -> {
        e.getSpecWrapper().startingWith(e.getName(), (String)e.getValue());
    }),
    ENDING_WITH((e) -> {
        e.getSpecWrapper().endingWith(e.getName(), (String)e.getValue());
    }),
    CONTAINS((e) -> {
        e.getSpecWrapper().contains(e.getName(), (String)e.getValue());
    }),
    GE((e) -> {
        e.getSpecWrapper().ge(e.getName(), e.getCompareValue());
    }),
    LE((e) -> {
        e.getSpecWrapper().le(e.getName(), e.getCompareValue());
    }),
    GT((e) -> {
        e.getSpecWrapper().gt(e.getName(), e.getCompareValue());
    }),
    LT((e) -> {
        e.getSpecWrapper().lt(e.getName(), e.getCompareValue());
    }),
    IN((e) -> {
        e.getSpecWrapper().in(e.getName(), (Collection)e.getValue());
    }),
    NOT_IN((e) -> {
        e.getSpecWrapper().notIn(e.getName(), (Collection)e.getValue());
    });

    private Consumer<OperatorWrapper> consumer;

    private Operator(Consumer<OperatorWrapper> consumer) {
        this.consumer = consumer;
    }

    public Consumer<OperatorWrapper> consumer() {
        return this.consumer;
    }
}
